package server

import (
	"fmt"
	"net"
)

type Server struct {
	Ip   string
	Port int
}

func NewServer(ip string, port int) *Server {
	Server := &Server{
		Ip:   ip,
		Port: port,
	}
	return Server
}

func closeListener(listener net.Listener) bool {
	err := listener.Close()
	if err != nil {
		fmt.Println("net.Listen.Close error: ", err)
		return false
	}
	return true
}

func (this *Server) Handler(conn net.Conn) {
	//...当前连接的业务
	fmt.Println("连接建立成功")
}

func (s *Server) Start() {
	fmt.Println("开始启动Chat服务器")
	// socket listen，如果是ipv4，则为tcp4/tcp6 如果为 udp 即 udp
	listen, err := net.Listen("tcp", fmt.Sprintf("%s:%d", s.Ip, s.Port)) //通过fmt转换成字符串，格式为string:%data
	if err != nil {
		fmt.Println("net.Listen error: ", err)
		return
	}
	// 执行关闭监听器操作
	defer closeListener(listen)
	// 死循环，防止服务器结束
	for {
		// accept，等待连接
		conn, err := listen.Accept()
		if err != nil {
			fmt.Println("net.Listen.Accept error: ", err)
			return
		}
		//do handler，处理连接操作方式
		go s.Handler(conn)
	}

}
